﻿using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using System.Web;
using System.Web.Hosting;

namespace QuanLyHocSinh.Database
{
    public static class HoTro
    {
        /// <summary>
        /// Tạo mã hóa MD5 từ chuỗi ký tự thường, để so sánh khi login hoặc lưu vào SQL
        /// </summary>
        /// <param name="input">Chuỗi mật khẩu hoặc các chuỗi ký tự khác</param>
        /// <returns></returns>
        public static string CalculateMD5Hash(this string input)
        {
            // step 1, calculate MD5 hash from input
            byte[] hash;
            using (var md5 = MD5.Create())
            {
                var inputBytes = Encoding.ASCII.GetBytes(input);

                hash = md5.ComputeHash(inputBytes);
            }

            // step 2, convert byte array to hex string
            var sb = new StringBuilder();
            foreach (var t in hash)
            {
                sb.Append(t.ToString("x2"));
            }

            return sb.ToString();
        }

        /// <summary>
        /// Lưu dữ liệu vào session
        /// </summary>
        /// <param name="value">Dữ liệu cần lưu</param>
        /// <param name="key">Tên lưu trong session</param>
        public static void LuuVaoSession(this object value, string key)
        {
            HttpContext.Current.Session[key] = value;
        }

        /// <summary>
        /// Đọc dữ liệu từ session
        /// </summary>
        /// <typeparam name="T">Kiểu trả về của dữ liệu</typeparam>
        /// <param name="key">Tên lưu trong session</param>
        /// <returns></returns>
        public static T DocTuSession<T>(string key)
        {
            if (HttpContext.Current.Session[key] != null)
            {
                return (T)HttpContext.Current.Session[key];
            }

            return default(T);
        }

        /// <summary>
        /// Lưu ảnh vào thư mục ~\Content\AnhHocSinh
        /// </summary>
        /// <param name="file"></param>
        /// <param name="filename">Tên file ảnh</param>
        /// <returns></returns>
        public static bool LuuFileAnhHocSinh(this HttpPostedFileBase file, string filename)
        {
            var folderLogo = Path.Combine(HostingEnvironment.ApplicationPhysicalPath, "Content\\AnhHocSinh");

            if (Directory.Exists(folderLogo) == false)
            {
                try
                {
                    Directory.CreateDirectory(folderLogo);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            var savingLocation = Path.Combine(folderLogo, filename);

            if (new FileInfo(savingLocation).Exists)
            {
                // If filename existed, add random string to create new name
                File.Delete(savingLocation);
            }

            byte[] imageBytes;

            using (var br = new BinaryReader(file.InputStream))
            {
                imageBytes = br.ReadBytes(500000);
                br.Close();
            }

            using (var fs = new FileStream(savingLocation, FileMode.Create))
            {
                var bw = new BinaryWriter(fs);

                try
                {
                    bw.Write(imageBytes);
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    fs.Close();
                    bw.Close();
                }
            }

            return true;
        }
    }
}